• 表示程序中可重复使用的一段代码集合可完成独立的功能

# 方法定义的格式

[修饰符] 返回值类型 方法名([参数类型 形参 1, 参数类型 形参 2, ...]) {
    // 方法体;
    [return 返回值]; // 当方法需要给调用者返回值时
}
1
2
3
4
  • 当方法无返回值时,必须给出返回类型 void
  • 参数列表 / 参数清单,包含参数的个数、参数类型、 参数顺序
  • 方法签名:方法名 + 方法参数列表,判断是否是同一个方法的标准
  • 在同一个类中,方法签名是唯一的,否则编译报错
  • 考虑当调用者传入数据的范围不合理时,该如何处理(进行参数校验)

# 方法定义的位置

  • 在类中,其它方法之外
  • 方法之间声明顺序无规定

# 方法的调用

  • main 方法由 JVM 来调用
  • 使用 static 修饰的方法:属于这个类本身,方法所在类名.方法名([实参 1, 实参 2, ...])
  • static 修饰的方法:属于该类的对象,不属于这个类本身,使用方法所在类的对象来调用,对象.方法名([实参 1, 实参 2, ...])
  • 针对于有返回的方法,调用者可以用对应类型的变量去接收返回值,也可以不去接收

# 方法重载 Overload

# 作用

解决了在同一个类中相同功能由于参数列表不同造成方法名不同的问题

# 规则

  • 两同:同类中,方法名相同
  • 一不同:方法参数列表不同

注意:方法重载**与方法的返回值类型、修饰符无关**

# 方法参数的值传递机制

  • 如果声明方法时包含了形参声明, 则调用方法时必须给这些形参指定参数值, 调用方法时实际传给形参的参数值也被称为实参

  • 方法被调用时,方法里的参数是以值传递的方式传递的,即传递的是实参的副本(实参变量在栈帧中的值),实参本身不会受到任何影响

    • 参数是基本数据类型时,直接传递实参值的副本。对基本数据类型的数据进行操作,由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。
    • 参数是引用数据类型时,传递的是实参所引用的十六进制地址值的副本。对引用类型的数据进行操作,分两种情况:一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容;一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。

# 形参个数可变的方法

// 与 getSum(int[] arr) 的方法签名相同
static int getSum(int... arr) {
    // 操作 arr 数组
}

// 调用 getSum
int sum = getSum(1, 2, 3, 4);
int sum = getSum();
1
2
3
4
5
6
7
8
  • 定义方法时,在最后一个形参的类型后增加三点(...),表明该形参可以接受多个参数值
  • 作用:调用者不用创建数组;调用时对应的实参可以没有(动态初始化一个数组长度为 0 的数组进行传递)
  • 本质就是一个数组参数:底层,在调用该方法的时候,用对应的实参作为元素创建一个数组,再将该数组传递给形参
  • 注意:一个方法最多只有一个可变参数,必须放在参数列表最后

# 递归方法

  • 一个方法的方法体实现中再次调用了方法本身
  • 递归一定要向已知方向递归
Updated at: 2023-03-10 09:13:23